package org.vison.wonfu.framework.commons.tools;

import io.prometheus.client.Histogram;
import lombok.extern.slf4j.Slf4j;

/**
 * Prometheus指标收集客户端工具类
 * 提供与Prometheus相关的指标记录和监控功能
 */
@Slf4j
public class MetricClient {

    /**
     * 使用Prometheus Histogram指标记录请求持续时间
     * 该方法提供了安全的指标记录机制，捕获并记录所有异常以避免影响主业务流程
     * 
     * @param histogram Prometheus的Histogram实例，用于记录分布类型指标
     * @param requestDuration 请求持续时间，通常以秒为单位
     * @param labels 指标标签数组，用于对指标进行多维分类和过滤
     */
    public static void histogramObserve(Histogram histogram,  double requestDuration, String... labels) {
        try {
            // 使用提供的标签设置直方图实例，并记录请求持续时间
            histogram.labels(labels).observe(requestDuration);
        } catch (Exception e) {
            // 捕获所有可能的异常，确保指标记录失败不会影响主业务流程
            log.error("histogramObserve error, labels: {}, requestDuration: {}", labels, requestDuration, e);
        }
    }
}